package com.juli.school.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.juli.school.dao.entity.Er;
import com.juli.school.dao.entity.Pub;
import com.juli.school.dao.mapper.ErMapper;
import com.juli.school.service.CommonService;
import com.juli.school.service.bo.ErBo;
import com.juli.school.service.enums.EnumModule;
import com.juli.school.service.utils.BeanUtils;
import com.juli.school.utils.core.model.CommonResp;
import com.juli.school.utils.core.model.ListResp;
import com.juli.school.utils.core.model.PageResp;
import com.juli.school.utils.dao.base.Page;
import com.juli.school.utils.log.annotation.DigestLog;

/**
 * @author wjp
 * @date 2017年10月5日
 */
@Service
public class ErService implements CommonService<ErBo> {
	
	private static final Logger logger = LoggerFactory.getLogger(ErService.class);
	
	@Resource
	ErMapper erMapper;
	
	@Resource
	PubService pubService;
	
	/**
	 * @Description: 新增闲置交易信息
	 * @author gaoxiang
	 * @date 2017年11月17日 下午2:51:40
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> add(ErBo erBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			erBo.setType(EnumModule.Er.code);
			// 先保存总的 发布信息表
			Pub pub = pubService.add(erBo);
			BeanUtils.copyProperties(erBo, pub);
			// 再保存详细闲置交易信息
			erMapper.insert(erBo);
			commonResp.setData(erBo.getSnStamp());
			commonResp.success();
		} catch (Exception e) {
			logger.error("新增闲置交易信息异常", e);
			commonResp.exception("新增闲置交易信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 删除闲置交易信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:40:06
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> delete(String snStamp,String stuId) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			pubService.deleteBySnStamp(snStamp,stuId);
			erMapper.deleteBySnStamp(snStamp);
			commonResp.success();
		} catch (Exception e) {
			logger.error("删除闲置交易信息异常", e);
			commonResp.exception("删除闲置交易信息异常"+e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 更新闲置交易发布信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:41:33
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> update(ErBo erBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			erBo.setType(EnumModule.Er.code);
			// 先更新总的 发布信息表
			Pub pub = pubService.update(erBo);
			BeanUtils.copyProperties(erBo, pub);
			// 再更新详细闲置交易信息
			erMapper.update(erBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("更新闲置交易信息异常", e);
			commonResp.exception("更新闲置交易信息异常 " + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 获取闲置交易详情
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:43:22
	 */
	@DigestLog
	public CommonResp<ErBo> detail(Pub req) {
		CommonResp<ErBo> commonResp = new CommonResp<ErBo>();
		try {
			req.setType(EnumModule.Er.code);
			// 先查询发布信息总表
			Pub detail = pubService.detail(req);
			ErBo erBo = new ErBo();
			BeanUtils.copyProperties(erBo, detail);
			// 如果有多余的字段，请查询详情表
			Er er = erMapper.getBySnStamp(detail.getSnStamp());
			erBo.setMallEr(er.getMallEr());
			commonResp.setData(erBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("获取发布信息详情发生异常", e);
			commonResp.exception("获取发布信息详情发生异常"+e.getCause());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 分页查询失物信息
	 * @author gaoxiang
	 * @date 2017年8月25日 下午11:36:40
	 */
	public CommonResp<PageResp<Pub>> listPage(ErBo req) {
		req.setType(EnumModule.Er.code);
		return pubService.listPage(req);
	}

	public CommonResp<ListResp<Pub>> list(ErBo req) {
		req.setType(EnumModule.Er.code);
		return pubService.list(req);
	}

	public CommonResp<ListResp<Pub>> getMyErList(Pub req, String kind) {
		CommonResp<ListResp<Pub>> commonResp = new CommonResp<>();
		try {
			if (StringUtils.isBlank(req.getStuId())) {
				throw new Exception("学生ID不可为空");
			}
			if (StringUtils.isEmpty(kind)) {
				throw new Exception("查找类型不可为空");
			}
			// 设置分页信息
			Page page = new Page();
			page.setCurrentPage(req.getPageNo());
			page.setShowCount(req.getPageSize());
			req.setPage(page);
			ErBo er = new ErBo();
			er.setPage(page);
			if("1".equals(kind)) {
				er.setStu2(Integer.valueOf(req.getStuId()));
			}else if ("2".equals(kind)) {
				er.setStuId1(Integer.valueOf(req.getStuId()));
			}
			List<Er> list = erMapper.listPage(er);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
//		return commonResp;
		return null;
	}
}
